home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
pack
/
powerpacker
/
ppfast_dec.s
next >
Wrap
Text File
|
1980-01-03
|
7KB
|
476 lines
*******************************************************************************
* PowerPacker Data Decompression
* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
* INPUTS : a1 = Destination
* a2 = Source
* d0 = Length of source
*******************************************************************************
PPData: lea PPB_24E(pc),a5
move.l a2,a0 ;make copy in a0
add.l d0,a0 ;PTR END (of PPacked data)
addq.l #4,a2 ;skip past ID header
moveq #$18,d6
moveq #0,d4
moveq #1,d5
move.l d5,d7
move.l a1,a4
move.l -(a0),d1
move.l d1,-(sp) ;save unpacked length
tst.b d1
beq.s PP_22
lsr.l d7,d5
beq.s PP_5E
PP_1E: sub.b d7,d1
lsr.l d1,d5
PP_22: lsr.l #8,d1
add.l d1,a1
PP_26: lsr.l d7,d5
beq.s PP_64
PP_2A: bcs PP_CC
moveq #0,d2
PP_30: moveq #0,d1
lsr.l d7,d5
beq.s PP_6A
PP_36: roxl.w d7,d1
lsr.l d7,d5
beq.s PP_70
PP_3C: roxl.w d7,d1
add.w d1,d2
subq.w #3,d1
beq.s PP_30
moveq #0,d0
PP_46: move.b d5,d4
lsr.l #8,d5
beq.s PP_82
PP_4C: move.b -$80(a5,d4.w),d0
move.b d0,-(a1)
dbra d2,PP_46
cmp.l a1,a4
bcs.s PP_CC
bra PP_1AA
PP_5E: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_1E
PP_64: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_2A
PP_6A: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_36
PP_70: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_3C
PP_76: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_D2
PP_7C: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_D8
PP_82: move.b $7F(a5,d4.w),d0
move.l -(a0),d5
move.w d5,d3
lsl.w d0,d3
bchg d0,d3
eor.w d3,d4
and.w #$ff,d4
moveq #8,d1
sub.w d0,d1
lsr.l d1,d5
add.w d6,d0
bset d0,d5
bra.s PP_4C
PP_9E: move.b $7F(a5,d4.w),d0
move.l -(a0),d5
move.w d5,d3
lsl.w d0,d3
bchg d0,d3
eor.w d3,d4
and.w #$ff,d4
moveq #8,d1
sub.w d0,d1
lsr.l d1,d5
add.w d6,d0
bset d0,d5
bra.s PP_E0
PP_BA: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_11A
PP_C0: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_120
PP_C6: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_126
PP_CC: moveq #0,d2
lsr.l d7,d5
beq.s PP_76
PP_D2: roxl.w d7,d2
lsr.l d7,d5
beq.s PP_7C
PP_D8: roxl.w d7,d2
move.b d5,d4
lsr.l #8,d5
beq.s PP_9E
PP_E0: moveq #0,d3
move.b -$80(a5,d4.w),d3
cmp.w #3,d2
bne.s PP_168
bclr #7,d3
beq.s PP_13A
moveq #13,d0
sub.b (a2,d2.w),d0
move.w d0,d1
add.w d0,d0
add.w d1,d0
add.w d0,d0
jmp PP_116(pc,d0.w)
PP_104: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_12C
PP_10A: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_132
PP_110: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_138
PP_116: lsr.l d7,d5
beq.s PP_BA
PP_11A: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_C0
PP_120: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_C6
PP_126: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_104
PP_12C: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_10A
PP_132: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_110
PP_138: roxl.w d7,d3
PP_13A: moveq #0,d1
lsr.l d7,d5
beq.s PP_156
PP_140: roxl.w d7,d1
lsr.l d7,d5
beq.s PP_15C
PP_146: roxl.w d7,d1
lsr.l d7,d5
beq.s PP_162
PP_14C: roxl.w d7,d1
add.w d1,d2
subq.w #7,d1
beq.s PP_13A
bra.s PP_198
PP_156: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_140
PP_15C: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_146
PP_162: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_14C
PP_168: moveq #13,d0
sub.b (a2,d2.w),d0
move.w d0,d1
add.w d0,d0
add.w d1,d0
add.w d0,d0
jmp PP_17A(pc,d0.w)
PP_17A: lsr.l d7,d5
beq.s PP_1B0
PP_17E: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_1B6
PP_184: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_1BC
PP_18A: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_1C2
PP_190: roxl.w d7,d3
lsr.l d7,d5
beq.s PP_1C8
PP_196: roxl.w d7,d3
PP_198: move.b (a1,d3.w),-(a1)
PP_19C: move.b (a1,d3.w),-(a1)
dbra d2,PP_19C
cmp.l a1,a4
bcs PP_26
PP_1AA: move.l (sp)+,d0 ;d0=unpacked length
lsr.l #8,d0 ;correct length
moveq #0,d1 ;d1=result code = all ok!
rts
PP_1B0: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_17E
PP_1B6: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_184
PP_1BC: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_18A
PP_1C2: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_190
PP_1C8: move.l -(a0),d5
roxr.l d7,d5
bra.s PP_196
or.l #$40C020A0,d0
bra.s PP_1B6
dc.b $10
dc.b $90
dc.b 'P'
dc.b $D0
dc.b '0'
dc.b $B0
dc.b 'p'
dc.b $F0
dc.b 8
dc.b $88
dc.b 'H'
dc.b $C8
dc.b '('
dc.b $A8
dc.b 'h'
dc.b $E8
dc.b $18
dc.b $98
dc.b 'X'
dc.b $D8
dc.b '8'
dc.b $B8
dc.b 'x'
dc.b $F8
dc.b 4
dc.b $84
dc.b 'D'
dc.b $C4
dc.b '$'
dc.b $A4
dc.b 'd'
dc.b $E4
dc.b $14
dc.b $94
dc.b 'T'
dc.b $D4
dc.b '4'
dc.b $B4
dc.b 't'
dc.b $F4
dc.b 12
dc.b $8C
dc.b 'L'
dc.b $CC
dc.b ','
dc.b $AC
dc.b 'l'
dc.b $EC
dc.b $1C
dc.b $9C
dc.b '\'
dc.b $DC
dc.b '<'
dc.b $BC
dc.b '|'
dc.b $FC
dc.b 2
dc.b $82
dc.b 'B'
dc.b $C2
dc.b '"'
dc.b $A2
dc.b 'b'
dc.b $E2
dc.b $12
dc.b $92
dc.b 'R'
dc.b $D2
dc.b '2'
dc.b $B2
dc.b 'r'
dc.b $F2
dc.b 10
dc.b $8A
dc.b 'J'
dc.b $CA
dc.b '*'
dc.b $AA
dc.b 'j'
dc.b $EA
dc.b $1A
dc.b $9A
dc.b 'Z'
dc.b $DA
dc.b ':'
dc.b $BA
dc.b 'z'
dc.b $FA
dc.b 6
dc.b $86
dc.b 'F'
dc.b $C6
dc.b '&'
dc.b $A6
dc.b 'f'
dc.b $E6
dc.b $16
dc.b $96
dc.b 'V'
dc.b $D6
dc.b '6'
dc.b $B6
dc.b 'v'
dc.b $F6
dc.b 14
dc.b $8E
dc.b 'N'
dc.b $CE
dc.b '.'
dc.b $AE
dc.b 'n'
dc.b $EE
dc.b $1E
dc.b $9E
dc.b '^'
dc.b $DE
dc.b '>'
dc.b $BE
dc.b '~'
dc.b $FE
PPB_24E: dc.l $18141C1
dc.l $21A161E1
dc.l $119151D1
dc.l $31B171F1
dc.l $98949C9
dc.l $29A969E9
dc.l $199959D9
dc.l $39B979F9
dc.l $58545C5
dc.l $25A565E5
dc.l $159555D5
dc.l $35B575F5
dc.l $D8D4DCD
dc.l $2DAD6DED
dc.l $1D9D5DDD
dc.l $3DBD7DFD
dc.l $38343C3
dc.l $23A363E3
dc.l $139353D3
dc.l $33B373F3
dc.l $B8B4BCB
dc.l $2BAB6BEB
dc.l $1B9B5BDB
dc.l $3BBB7BFB
dc.l $78747C7
dc.l $27A767E7
dc.l $179757D7
dc.l $37B777F7
dc.l $F8F4FCF
dc.l $2FAF6FEF
dc.l $1F9F5FDF
dc.l $3FBF7FFF
dc.l $10102
dc.l $2020203
dc.l $3030303
dc.l $3030304
dc.l $4040404
dc.l $4040404
dc.l $4040404
dc.l $4040405
dc.l $5050505
dc.l $5050505
dc.l $5050505
dc.l $5050505
dc.l $5050505
dc.l $5050505
dc.l $5050505
dc.l $5050506
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060606
dc.l $6060607
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070707
dc.l $7070700
dc.b $27
dc.b $A7